There are various situations in which multiple data processors operate simultaneously executing the same computer software to perform similar tasks. For example, network processors are devices which receive data packets in telecommunication networks and perform actions based upon information in the packet. Examples of actions performed by network processors include: forwarding a packet to a particular output port, assigning a packet to a priority queue, dropping a packet, etc. Since most network processing tasks must be performed individually for each packet, it is not uncommon for network processors to have an architecture in which the tasks of processing incoming packets are shared between a plurality of processing units. Each of the processing units executes the same computer software, which controls how the incoming packets are processed.
A large number of network processors may be fabricated on a single application specific integrated circuit (ASIC). Each processor executes instructions from an instruction memory. Some network processors have a common instruction memory shared by a number of processing units. For example, PCT publication No. WO 01/17179 discloses a network processor having N processing units which can concurrently execute picocode from a common instruction memory.
Image processing devices may also include multiple processing units which execute instructions from a common instruction memory.
A problem with such shared memory architectures is that each location in a common instruction memory can typically be accessed only by one processor at a time. Where this is the case, some processing units may not be able to obtain instructions from the common instruction memory when they need them. Such processors may stall until a time slice during which they can retrieve the instructions that they need from the common instruction memory. This is inefficient and reduces overall processing throughput.